[アップデート] AWS Step FunctionsがHTTPエンドポイントおよびTestState APIをサポートしました #AWSreInvent
こんにちは。サービス開発室の武田です。
re:Invent期間ということで、次から次へとアップデートが発表されていますね。さて今回はAWS Step Functionsのアップデートです。
次の2つの機能が同時に発表されました。
- HTTPエンドポイントステートの追加
- テスト状態APIの追加
うれしいポイント
まずHTTPエンドポイントの追加ですが、これは外部のURLに対してStep Functionsに統合されたタスクでリクエストできます。これまでLambda関数などを経由する必要がありましたが、それが不要になります。単純にコードが減るのでバグも減ることが期待できますね。
次にテスト状態APIですが、これまで定義したステートをテストするには、いちいちステートマシン全体を実行する必要がありました。さらに確認したいステートがワークフローの深いところにあると時間もかかりますし、依存関係の把握も面倒です。今回テスト機能が追加されたことで、指定したステートを単独で実行して挙動を確認できます。これはとてもうれしいアップデートですね!
やってみた
それではさっそく試してみましょう。
HTTPエンドポイントを使用する上での注意点として、必ず認証の設定が必要です。認証はEventBridgeの接続リソースを定義し、Step Functionsからをそれを参照して使用します。接続リソースはBasic認証、OAuth、APIキーといった認証に対応しています。今回は認証の必要ないAPIをたたくのですが、その場合でも接続リソースの指定は必須となります。そのため事前にダミーの認証設定を作成します。
まずEventBridgeのページにアクセスし、「APIの送信先」を選択します。タブが切り替えられるので「接続」にします。「作成」ボタンを押して新規に作成していきます。
「接続名」はtest-conn
としました。任意の名前でOKです。
次に認証の設定です。実際には必要ない情報ですが、「認証タイプ」を「APIキー」とし、名前と値に適当な値を入力します。
「作成」ボタンを押せば完了です。
作成できたら、次にステートマシンを作成しましょう。新規に作成し、ワークフロースタジオを操作していきます。左のアクション一覧に「HTTP Endpoint Call third-party API」というステートがあるので、これをドラッグ&ドロップします。
次に各パラメーターを埋めていきましょう。今回はzipcloudさんの郵便番号検索APIを呼び出してみます。それぞれ次のパラメーターを指定します。
- APIエンドポイント
- https://zipcloud.ibsnet.co.jp/api/search
- メソッド
- GET
- Authentication
- test-conn
このAPIはボディではなく、クエリパラメーターとして検索する郵便番号を指定します。今回は次のように指定しました。実用性を考えるなら、ハードコーディングではなく、前のステートから受け取るようにすべきでしょう。
{ "zipcode": "1050003" }
ここまで指定できたら、一度ステートマシンを保存します。ステートマシンの実行にはIAMロールが必要で、HTTPエンドポイントの実行にもいくつかの権限が必要です。ワークフロースタジオではIAMロールを自動作成してくれますので、まずはそれに任せます。
作成されたIAMロールを確認すると、次のような権限が設定されていることを確認できます。こちらはEventBridgeの接続リソースへのアクセス権限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "RetrieveConnectionCredentials1", "Action": [ "events:RetrieveConnectionCredentials" ], "Resource": [ "arn:aws:events:ap-northeast-1:123456789012:connection/test-conn/*" ] }, { "Effect": "Allow", "Sid": "GetAndDescribeSecretValue1", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": [ "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:events!connection/test-conn/*" ] } ] }
こちらはHTTPエンドポイントを実行するための権限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "InvokeHttpEndpoint1", "Action": [ "states:InvokeHTTPEndpoint" ], "Resource": [ "arn:aws:states:ap-northeast-1:123456789012:stateMachine:*" ], "Condition": { "StringEquals": { "states:HTTPEndpoint": [ "https://zipcloud.ibsnet.co.jp/api/search" ], "states:HTTPMethod": [ "GET" ] } } } ] }
手動でIAMロールなどを作成する場合、これらの権限の付与し忘れに注意しましょう。
IAMロールが確認できたら、あらためてワークフロースタジオでステートマシンの編集画面を開きます。右上に「テスト状態」ボタンがあるので、これをクリックします。
ステートをテストする画面が開きます。「テストを開始」ボタンをクリックするとテストできます。その際「状態の入力」を指定することで、実際に渡される値を想定してテストできます。今回は空のまま実行しました。
右の「出力」に実行結果が出ました。きちんとAPIからのレスポンスが確認できました。
まとめ
Step Functionsのアップデートをお届けしました。外部のAPIをたたくのが簡単になりました!また、これまでステートを単体で実行する手段がありませんでしたが、今回追加されたことで開発が楽になりそうですね!